package com.elitedatai.mchtest.flyer.model.dto;

import com.elitedatai.mchtest.flyer.model.enums.FlyerStatusEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 飞手数据传输对象
 * 用于API接口的数据交互
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FlyerDTO implements Serializable {

    /**
     * 主键ID
     */
    private Long id;

    /**
     * 飞手ID（业务主键）
     */
    private String flyerId;

    /**
     * 飞手姓名
     */
    private String flyerName;

    /**
     * 飞手状态：1-在职，2-离职，3-飞行中，4-空闲
     */
    private Integer status;

    /**
     * 飞手状态枚举对象（用于前端显示）
     */
    private FlyerStatusEnum statusEnum;

    /**
     * 联系电话
     */
    private String phone;

    /**
     * 邮箱地址
     */
    private String email;

    /**
     * 身份证号
     */
    private String idCard;

    /**
     * 出生日期
     */
    private LocalDate birthDate;

    /**
     * 性别：M-男，F-女
     */
    private String gender;

    /**
     * 地址
     */
    private String address;

    /**
     * 紧急联系人
     */
    private String emergencyContact;

    /**
     * 紧急联系人电话
     */
    private String emergencyPhone;

    /**
     * 资质类型
     */
    private String qualificationType;

    /**
     * 证书编号
     */
    private String certificateNumber;

    /**
     * 资质到期日期
     */
    private LocalDate qualificationExpiry;

    /**
     * 认证等级
     */
    private String certificationLevel;

    /**
     * 总飞行时长（小时）
     */
    private BigDecimal totalFlightHours;

    /**
     * 总任务次数
     */
    private Integer totalMissions;

    /**
     * 安全评级（1-5星）
     */
    private Integer safetyRating;

    /**
     * 事故次数
     */
    private Integer accidentCount;

    /**
     * 违规次数
     */
    private Integer violationCount;

    /**
     * 备注
     */
    private String remarks;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
}